package edu.uoc.tds.pec4.client.gestion;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.List;
import javax.swing.JOptionPane;
import edu.uoc.tds.pec4.beans.*;
import edu.uoc.tds.pec4.common.ConexionMatriculaInterface;
import edu.uoc.tds.pec4.i18n.TDSLanguageUtils;

public class ControladorConexion {
	/**
	 * @author asosal
	 *
	 */
	private static ConexionMatriculaInterface enlaceRemoto = null;
	private final static String url = new String("//localhost/TURVA3");
	
	public ControladorConexion() {
		// TODO Auto-generated constructor stub
		try {
			enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		}
        
	}	
	
		
	public static int conexionUsuario(String login, String password) throws RemoteException, SQLException, Exception{
		
		try {
			enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		}
		return enlaceRemoto.conexionUsuario(login, password);	
	}	
	
public static Usuario getUsuarioPorLogin(String login) throws RemoteException, SQLException, Exception{
		
		try {
			enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
		} catch (MalformedURLException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		} catch (RemoteException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
			e.printStackTrace();
		} catch (NotBoundException e) {
			JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		}
		return enlaceRemoto.getUsuarioPorLogin(login);	
	}	
	
public static int cambioIdioma(int idUsuario,String newIdioma) throws RemoteException, SQLException, Exception{
	
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.cambioIdioma(idUsuario, newIdioma);
}


public static int cambioPassword(int idUsuario, String newPassword)  throws RemoteException, SQLException, Exception{
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.cambioPassword(idUsuario, newPassword);
	
}	
public static List<Matricula> listaMatriculas(String condicion) throws RemoteException, SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.listaMatriculas(condicion);
}


public static Grupo getGrupo(int idGrupo) throws RemoteException, SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.getGrupo(idGrupo);
}


public static ConvocatoriaCurso getConvocatoria(int idCurso) throws RemoteException, SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.getConvocatoria(idCurso);
}


public static int insertarMatricula(Matricula matricula) throws RemoteException, SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.altaMatricula(matricula);
}


public static Curso getCurso(Integer idCurso) throws RemoteException, SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.getCurso(idCurso);
}


public static List<ConvocatoriaCurso> listaConvocatorias(String condicion) throws RemoteException, SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.listaConvocatorias(condicion);
}

public static List<Grupo> listarGrupos(int campo, String condicion) throws SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.listaGrupos(campo, condicion);
}
public static int listaMatriculasGrupoAlumno(int idCurso,int idAlumno) throws SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.numMatriculasCursoAlumno(idCurso, idAlumno);
}
public static List<InformeMatricula> listaInfomeMatriculas(String condicion) throws SQLException, Exception {
	try {
		enlaceRemoto = (ConexionMatriculaInterface)Naming.lookup(url);
	} catch (MalformedURLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.urlrmi"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
		e.printStackTrace();
	} catch (NotBoundException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	}
	return enlaceRemoto.listaInformeMatriculas(condicion);
}
}

